Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 vector-feature-night-mode-enabled skin-theme-clientpref-os vector-sticky-header-enabled" lang="fr" dir="ltr"><head>
<meta charset="UTF-8">
<title>Raycasting</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://fr.wikipedia.org/wiki/Raycasting"> <link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Raycasting rootpage-Raycasting skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span lang="en">Raycasting</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="fr" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="fr" dir="ltr"><p class="mw-empty-elt">
</p>

<p>Le <b><span class="lang-en" lang="en">ray casting</span></b> est une technique de calcul d'<a href="Infographie_tridimensionnelle" title="Infographie tridimensionnelle">images de synthèse 3D</a>, facilement <a href="Acc%C3%A9l%C3%A9ration_mat%C3%A9rielle" title="Accélération matérielle">accélérée matériellement</a> par une <a href="Carte_graphique" title="Carte graphique">carte graphique</a> dédiée.
</p><p>L'accélération peut se faire en utilisant l'API <a href="OpenGL" title="OpenGL">OpenGL</a>, <a href="3dfx" title="3dfx">Glide</a> (tombé en désuétude), ou <a href="Direct3D" title="Direct3D">Direct3D</a>.
</p><p>Elle a été utilisée avec succès au début des années <a href="1990" title="1990">1990</a> dans les jeux vidéo comme <i><a href="Wolfenstein_3D" title="Wolfenstein 3D">Wolfenstein 3D</a></i> ou <i><a href="Doom_(jeu_vid%C3%A9o%2C_1993)" title="Doom (jeu vidéo, 1993)"><span class="lang-en" lang="en">Doom</span></a></i>. L'implémentation était alors entièrement logicielle et ne faisait pas appel à du matériel spécifique. Tombée en désuétude lors de l'apparition des moteurs entièrement en 3D, cette technique a été remise au goût du jour par les technologies portables comme <a href="Java_(technologie)" class="mw-redirect" title="Java (technologie)">Java</a> ou <a href="Adobe_Flash" title="Adobe Flash">Flash</a>.
</p>

<div class="mw-heading mw-heading2"><h2 id="Principe_du_ray_casting">Principe du ray casting</h2></div>
<p>Le ray casting tire parti de certaines caractéristiques du monde virtuel pour simplifier et accélérer le calcul des images&nbsp;:
</p>
<ul><li>les murs sont des plans, en général perpendiculaires par rapport au sol&nbsp;;</li>
<li>il n'y a pas de primitives complexes ou alors sous la forme d'approximations planaires&nbsp;;</li>
<li>les mondes virtuels sont <i>de facto</i> plus simples.</li></ul>
<p>Cette méthode de calcul présente plusieurs limites. Les cylindres sont par exemple des approximations avec des faces planes. Le <span class="lang-en" lang="en">ray casting</span> produit des images plutôt anguleuses avec des effets de bloc désagréables. Autre limitation courante de la technique du <span class="lang-en" lang="en">ray casting</span>&nbsp;: le champ de vision est parallèle au sol, il n'est pas possible d'avoir un axe de la caméra entièrement libre. Ceci est particulièrement visible dans les premiers jeux vidéo à vue subjective comme <i><a href="Doom_(jeu_vid%C3%A9o%2C_1993)" title="Doom (jeu vidéo, 1993)"><span class="lang-en" lang="en">Doom</span></a></i> où le champ de vision pointe toujours vers l'avant et ne peut pas regarder le plafond ou le sol. Il n'est pas non plus possible d'effectuer une rotation autour de l'axe de la caméra (<i><span class="lang-en" lang="en">roll</span></i>). Ceci est dû au fait que le <span class="lang-en" lang="en">ray casting</span> est essentiellement une technique fondée sur un espace en 2D et non pas sur une description complète en 3D du monde.
</p>
<div class="mw-heading mw-heading2"><h2 id="Différence_entre_le_ray_casting_et_le_ray_tracing_(lancer_de_rayons)"><span id="Diff.C3.A9rence_entre_le_ray_casting_et_le_ray_tracing_.28lancer_de_rayons.29"></span>Différence entre le <span class="lang-en" lang="en">ray casting</span> et le <a href="Ray_tracing" title="Ray tracing">ray tracing</a> (lancer de rayons)</h2></div>
<p>Certains ouvrages utilisent les deux termes comme des synonymes&nbsp;; toutefois, le <span class="lang-en" lang="en">ray casting</span> a historiquement une autre définition puisqu'il est intimement lié aux premiers jeux vidéo en 3D.
</p><p>Le lancer de rayons s'affranchit des contraintes du ray-casting puisqu'il s'appuie sur les intersections précises avec des primitives&nbsp;: une sphère est par exemple <i>parfaite</i> en lancer de rayons dans le sens où l'intersection est calculée de manière analytique selon la définition mathématique de la sphère. Ce n'est pas le cas avec le <span class="lang-en" lang="en">ray casting</span> qui constitue en quelque sorte un sous-ensemble du lancer de rayons et qui va approcher la surface sphérique par des faces planes. Le lancer de rayons nécessite plus de puissance de calcul mais compense par une qualité d'image incomparable.
</p>
<div class="mw-heading mw-heading2"><h2 id="Optimisation_du_ray_casting">Optimisation du <span class="lang-en" lang="en">ray casting</span></h2></div>
<p>La manière la plus simple de rendre le ray casting est de lancer un rayon par <a href="Pixel" title="Pixel">pixel</a>, chaque rayon fait une recherche dans l'espace pour trouver l'intersection avec le mur le plus proche.
</p><p>On l'accélère avec des optimisations comme&nbsp;:
</p>
<div class="mw-heading mw-heading3"><h3 id="Recherche_binaire_récursive"><span id="Recherche_binaire_r.C3.A9cursive"></span>Recherche binaire récursive</h3></div>
<p>On lance un premier rayon au centre de l'écran, puis récursivement sur les deux moitiés et ainsi de suite. Lorsque deux rayons voisins ont touché le même mur, on arrête la recherche et on rend les tranches intermédiaires avec une interpolation fondée sur le z-mapping.
</p><p>Technique intéressante pour des résolutions très faibles et des espaces très découpés, si bien que dans l'arrière plan le nombre de polygones devient plus grand que le nombre de pixels.
</p>
<div class="mw-heading mw-heading3"><h3 id="Rendu_à_travers_des_portails"><span id="Rendu_.C3.A0_travers_des_portails"></span>Rendu à travers des portails</h3></div>
<p>On ne lance des rayons que sur les points du secteur (polygone) où se trouve la caméra. Puis on recommence récursivement sur les secteurs adjacents avec de nouveaux cônes de vision définis par les rayons lancés sur les points des <i>portails</i> (murs invisibles qui connectent deux secteurs).
</p><p>La recherche s'arrête quand les sous-cônes de vision ne traversent plus aucun portail.
</p><p>Le cône de vision est ainsi décomposé en une série de sous-cônes qui vont permettre de trier les faces avant leur rendu.
</p>
<div class="mw-heading mw-heading3"><h3 id="Z_ordering_pré-rendu"><span id="Z_ordering_pr.C3.A9-rendu"></span>Z <span class="lang-en" lang="en">ordering</span> pré-rendu</h3></div>
<p>Technique utilisée dans <i><a href="Doom_(jeu_vid%C3%A9o%2C_1993)" title="Doom (jeu vidéo, 1993)">Doom</a></i>. On ne lance plus que deux rayons pour le <a href="Tronc_(g%C3%A9om%C3%A9trie)" title="Tronc (géométrie)">frustum</a> clipping des faces. Leur ordre de rendu est précalculé avec un <a href="Partition_binaire_de_l'espace" title="Partition binaire de l'espace">arbre BSP</a> et le <a href="Clipping_(infographie)" title="Clipping (infographie)"><span class="lang-en" lang="en">clipping</span></a> entre les faces s'effectue sur un axe à une dimension.
</p><p>La recherche des faces s'arrête quand tous les pixels ont été remplis.
</p><p>Plus rapide que la précédente, elle présente l'inconvénient de ne fonctionner qu'avec des espaces statiques.
</p>
<div class="mw-heading mw-heading2"><h2 id="Voir_aussi">Voir aussi</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Liens_externes">Liens externes</h3></div>
<ul><li><abbr class="abbr indicateur-langue" title="Langue : français">(fr)</abbr> <a rel="nofollow" class="external text" href="http://zupi.free.fr/PTuto/index.php?ch=ptuto&amp;p=ray">Explications du <span class="lang-en" lang="en">RayCasting</span></a></li>
<li><a rel="nofollow" class="external text" href="http://pouet.net/prod.php?which=78044">Raycaster interactif pour MSDOS en 64 octets (avec source code)</a></li></ul>
<ul id="bandeau-portail" class="bandeau-portail"><li><span class="bandeau-portail-element"><span class="bandeau-portail-icone"><span class="noviewer" typeof="mw:File"></span></span> <span class="bandeau-portail-texte">Portail de l’imagerie numérique</span> </span></li> <li><span class="bandeau-portail-element"><span class="bandeau-portail-icone"><span class="noviewer" typeof="mw:File"></span></span> <span class="bandeau-portail-texte">Portail du jeu vidéo</span> </span></li> </ul></div><!--htdig_noindex--><div><div class="zim-footer">
Cet article est issu de <a class="external text" title="Dernière modification le 2025-09-15" href="https://fr.wikipedia.org/wiki/?title=Raycasting&amp;oldid=228982656">Wikipédia</a>. Sauf mention contraire, le texte est disponible sous <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.fr">Creative Commons Attribution-Share Alike 4.0</a>. Des conditions supplémentaires peuvent s’appliquer aux fichiers multimédias.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>

</body></html>